﻿@namespace AntDesign
@inherits AntInputComponentBase<string>

<div style="@Style">
    <span class="ant-cascader-picker @_pickerSizeClass" tabindex="1" @onclick="InputOnToggle" @onblur="CascaderOnBlur" @onmouseover="InputOnMouseOver" @onmouseout="InputOnMouseOut">
        <span class="ant-cascader-picker-label"></span>
        <input autocomplete="off" tabindex="-1" placeholder="@PlaceHolder" class="ant-input ant-cascader-input @_inputSizeClass" readonly="@Readonly" type="text" value="@_displayText">
        @if (string.IsNullOrWhiteSpace(Value) || !ShowClearIcon)
        {
            <Icon Type="down" Class="@($"ant-cascader-picker-arrow {(ToggleState ? "ant-cascader-picker-arrow-expand" : string.Empty)}")" />
        }
        else
        {
            <Icon Type="close-circle" Class="ant-cascader-picker-clear" OnClick="ClearSelected" StopPropagation />
        }
    </span>

    @if (ToggleState && _nodelist != null && _nodelist.Any())
    {
        <div class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft" tabindex="-1" @onblur="CascaderOnBlur">
            <div @onmouseover="NodesOnMouseOver" @onmouseout="NodesOnMouseOut">
                <ul class="ant-cascader-menu">
                    @foreach (CascaderNode nd in _nodelist)
                    {
                        bool isActive = _renderNodes.Where(n => n.Label == nd.Label).Any();
                        string activeClass = isActive ? "ant-cascader-menu-item-active" : string.Empty;

                        <li class="ant-cascader-menu-item ant-cascader-menu-item-expand @activeClass @(nd.Disabled ? "ant-cascader-menu-item-disabled" : string.Empty)" title="@nd.Label" role="menuitem"
                            @onclick="@(e => NodeOnClick(nd))" @onmouseover="@(e => NodeOnMouseOver(nd))">
                            @nd.Label
                            @if (nd.HasChildren)
                            {
                                <span class="ant-cascader-menu-item-expand-icon">
                                    <Icon Type="right" />
                                </span>
                            }
                        </li>
                    }
                </ul>
                @foreach (CascaderNode node in _renderNodes)
                {
                    if (node.HasChildren)
                    {
                        <ul class="ant-cascader-menu">
                            @foreach (CascaderNode m in node.Children)
                            {
                                bool isActive = _renderNodes.Where(n => n.Label == m.Label).Any();
                                string activeClass = isActive ? "ant-cascader-menu-item-active" : string.Empty;

                                <li class="ant-cascader-menu-item ant-cascader-menu-item-expand @activeClass @(m.Disabled ? "ant-cascader-menu-item-disabled" : string.Empty)" title="@m.Label" role="menuitem"
                                    @onclick="@(e => NodeOnClick(m))" @onmouseover="@(e => NodeOnMouseOver(m))">
                                    @m.Label
                                    @if (m.HasChildren)
                                    {
                                        <span class="ant-cascader-menu-item-expand-icon">
                                            <Icon Type="right" />
                                        </span>
                                    }
                                </li>
                            }
                        </ul>
                    }
                }
            </div>
        </div>
    }
</div>